package com.cw.jeeyt.core.intf;

import java.io.File;
import java.io.IOException;

import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.lib.Repository;

public interface GitCore {
    /**
     * sql脚本文件同步到git仓库
     *
     * @param sqlType SQl类型
     * @param loginName 系统登录名
     * @param fileName 文件名
     * @param sqlConent 文件内容
     * @param comment 提交说明
     * @return
     */
    boolean writeFileToGit(String sqlType, String loginName, String sqlConent, String fileName,
        String comment);

    /**
     * 根据主干master新建分支并同步到远程仓库
     *
     * @param branchName 分支名
     * @throws GitAPIException
     */
    String newBranch(String projectCode,String branchName);

    /**
     * 添加文件
     *
     * @param fileName
     * @return
     */
    boolean addFile(String fileName);

    /**
     * 提交代码到本地仓库
     *
     * @param comment 文件位置(相对仓库位置:a/b/file)
     * @param comment 提交git内容描述
     * @return
     */
    boolean commitFile(String comment);

    boolean push();

    /**
     * 提交并推送代码至远程服务器
     *
     * @param filePath 提交文件路径(相对路径)
     * @param desc 提交描述
     * @return
     */
    boolean commitAndPush(String filePath, String desc);
    /**
     * 拉取远程代码
     *
     * @return 远程分支名
     */
    boolean pull(String projectCode,String remoteBranchName);
    /**
     * 检出项目
     *
     * @return
     */
    boolean checkout(String projectCode,String branchName);

    /**
     * 从远程获取最新版本到本地 不会自动合并 merge
     *
     * @return
     */
    boolean fetch();

    /**
     * 拉取指定分支到本地
     *
     * @param projectIds
     * @param branchName
     * @return
     */
    boolean cloneGitProjectToLocal(String projectIds, String branchName, String cloneUrl);

    /**
     * 拉取新创建的分支到本地
     *
     * @param cloneURL
     * @return
     */
    boolean pullNewBranchToLocal(String cloneURL);

    void deleteFolder(File file);

    /**
     * 生成文件写内容
     *
     * @param content 文件内容
     * @param filePath 文件名称
     */
    boolean createFile(String content, String filePath);

    /**
     * 创建本地新仓库
     *
     * @param repoPath 仓库地址 D:/workspace/TestGitRepository
     * @return
     * @throws IOException
     */
    Repository createNewRepository(String repoPath) throws IOException;

    /**
     * 创建仓库，仅需要执行一次
     */
    boolean setupRepository(String projectPath , String baseBranch);
}
